package cn.itcast.bos.web.action.take_delivery;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;

import cn.itcast.bos.web.action.common.BaseAction;

/**
 * 
 * @author Administrator
 *促销活动图片上传服务器功能
 */
@Controller
@Namespace("/")
@ParentPackage("json-default")//编辑器规定了返回的参数是json格式
@Scope("prototype")
public class ImageAction extends BaseAction<Object> {

	//接收文件
	private File imgFile;//编辑器规定的文件上传的名称
	private String imgFileFileName;//文件名
	private String imgFileContentType;//文件类型
	
	//提供setter方法
	public void setImgFile(File imgFile) {
		this.imgFile = imgFile;
	}

	public void setImgFileFileName(String imgFileFileName) {
		this.imgFileFileName = imgFileFileName;
	}

	public void setImgFileContentType(String imgFileContentType) {
		this.imgFileContentType = imgFileContentType;
	}



	//定义上传方法
	@Action(value="image_upload",results={@Result(name="success",type="json")})
	public  String upload() throws IOException{
	
	//存储图片文件的绝对地址
	String savePath = ServletActionContext.getServletContext().getRealPath("/upload/");
	
	//存储图片的相对路径,工程名+文件名
	String saveUrl=ServletActionContext.getRequest().getContextPath()+"/upload/";
	
	//生成随机的图片名，避免图片名重复
	UUID uuid=UUID.randomUUID();
	
	//拿到图片的扩展名
	String ext = imgFileFileName.substring(imgFileFileName.lastIndexOf("."));
	
	//将图片的名字用随机的数字换掉
	String randomFileName=uuid+ext;
	
	//保存图片,用绝对路径，保存到磁盘
	FileUtils.copyFile(imgFile, new File(savePath+"/"+randomFileName));
	
	//给客户端返回相对对路径
	
	Map<String ,Object> map=new HashMap<String ,Object>();
	
	map.put("error", 0);//上传成功返回0，上传失败返回1
	map.put("url", saveUrl+randomFileName);//返回error和url是kindEditor规定的
	
	// 将返回的值存入值栈
  ActionContext.getContext().getValueStack().push(map);
	return SUCCESS;
	}

	/**
	 * 点击图片空间发送请求
	 */
  @Action(value="image_manage",results={@Result(name="success",type="json")})
    public String manage(){
	  
	//获取储存图片文件夹的绝对路径
	String rootPath = ServletActionContext.getServletContext().getRealPath("/upload/");
	  
	//获取文件夹的相对路径
	String rootUrl=ServletActionContext.getRequest().getContextPath()+"/upload/";
	
	// 遍历目录取的文件信息
	List<Map<String, Object>> fileList = new ArrayList<Map<String, Object>>();
	// 当前上传目录
	File currentPathFile = new File(rootPath);
	// 图片扩展名
	String[] fileTypes = { "gif", "jpg", "jpeg", "png", "bmp" };//图片扩展名的形式
    
	if (currentPathFile.listFiles() != null) {
		//遍历当前文件夹
		for (File file : currentPathFile.listFiles()) {
			
			Map<String, Object> hash = new HashMap<String, Object>();
		
			String fileName = file.getName();
			//判断文件是是一个目录还是单个的文件
			if (file.isDirectory()) {
				hash.put("is_dir", true);//是不是目录
				hash.put("has_file", (file.listFiles() != null));//里面是否有内容
				hash.put("filesize", 0L);//长度
				hash.put("is_photo", false);//是否是图片
				hash.put("filetype", "");//文件的类型
			} else if (file.isFile()) {
				String fileExt = fileName.substring(
						fileName.lastIndexOf(".") + 1).toLowerCase();//是单个的文件，获取扩展名
				hash.put("is_dir", false);
				hash.put("has_file", false);
				hash.put("filesize", file.length());
				hash.put("is_photo", Arrays.<String>asList(fileTypes)
						.contains(fileExt));//看扩展名是否包含在上面图片扩展名的数组内
				hash.put("filetype", fileExt);
			}
			hash.put("filename", fileName);
			hash.put("datetime",
					new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file
							.lastModified()));
			fileList.add(hash);
		}
	}
	Map<String, Object> result = new HashMap<String, Object>();
	result.put("moveup_dir_path", "");
	result.put("current_dir_path", rootPath);
	result.put("current_url", rootUrl);
	result.put("total_count", fileList.size());
	result.put("file_list", fileList);
	//将结果存入值栈
	ActionContext.getContext().getValueStack().push(result);


	
	  return SUCCESS;
  }
	
	
}
